import Vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex);

// 导入操作本地存储token的函数
import { saveToken, getToken, delToken } from '@/utils/auth'
// 导入接口
import { userInfoAPI } from "@/api";

// 实例化 vuex 对象
const store = new Vuex.Store({

    state: {
        // 用来保存token和refresh_token的对象
        tokenObj: getToken() || {},
        // 用来保存登录的用户信息
        userInfo: {}
    },
    mutations: {

        // 用来修改tokenObj的方法
        changeToken(state, obj) {
            // 保存到vuex
            state.tokenObj = obj
            // 还要保存到本地存储
            saveToken(obj)
        },

        // 用来修改用户信息的方法
        changeUserInfo(state, obj) {

            state.userInfo = obj
        },

        // vuex里提供一个删除token的方法（因为代码都是同步所以写到mutations里）
        logout (state) {
            // 删state里的token
            state.tokenObj = {}
            // 删本地存储的token
            delToken()
            // 删掉保存的用户信息，不然别人换账号登录还是上一个账号的信息
            state.userInfo = {}
        }
    },

    actions: {

        async getUserInfo(context) {

            // 发请求
            if (!context.state.userInfo.name) {
                // 请求登录的用户信息
                let res = await userInfoAPI();
                // 请求到了后就把数据存到vuex里
                context.commit("changeUserInfo", res.data.data);
            }
        }
    }
})

// 暴露出去
export default store